Skip to content

ci: 版の同期を単一情報源からの導出と自動コミットへ寄せる - #22

Draft
k163377 wants to merge 2 commits into
mainfrom
ci/auto-version-sync
Draft

ci: 版の同期を単一情報源からの導出と自動コミットへ寄せる#22
k163377 wants to merge 2 commits into
mainfrom
ci/auto-version-sync

Conversation

@k163377

@k163377 k163377 commented Aug 2, 2026

Copy link
Copy Markdown
Contributor

PR #21(Dependabot の maven-core 3.9.12 → 3.9.16)が :checkVersionMentions で落ちた件への対応。

何が起きていたか

  1. Dependabot が catalog の maven を書き換える
  2. docs/test/テスト戦略.md の「環境: … / Maven 3.9.12 / …」が置き去りになる
  3. checkVersionMentionscheck 経由で失敗する

検知は設計どおり働いていたが、追随は同期タスクの手動実行に委ねられていた。
加えて maven 版そのものが、catalog のコメントが宣言する不変条件(kotlin-maven-plugin
自身が参照する版に揃える)から外れる更新だった。

変更

1. maven 版の導出(build:

kotlin-maven-plugin の親 POM の <maven.version> を単一情報源とし、
syncMavenVersion が catalog へ書き戻す/checkMavenVersion が乖離を検出する。
maven-core は provided スコープのため Gradle が推移解決せず、リテラルを持つ必要があるが、
その値は手で選ばない。Dependabot の version updates からは外す。

2. 同期の自動化(ci:

version-sync ワークフローが build の失敗を workflow_run で受け、
同期タスクの結果を PR ブランチへコミットする。

検証済み

  • checkMavenVersion 正常系 / 乖離検出 / syncMavenVersion による復元(3.9.16 → 3.9.12)
  • ./gradlew build green
  • 親 POM 導出は configuration cache 下でも動作

この PR で検証できないこと

workflow_run はデフォルトブランチ上の定義でしか発火しないため、自動コミット挙動そのものは
main マージ後に実演で確認する必要がある(8916be2 の版表記ズレ実演と同じ手順)。
本 PR で確認できるのは Gradle タスク側と既存 CI の非退行まで。

追随

PR #21 は本 PR のマージ後にクローズする(maven は導出値になり、独立した更新対象ではなくなるため)。

🤖 Generated with Claude Code

k163377 and others added 2 commits August 2, 2026 18:04
maven-core は kotlin-maven-plugin の realm が実行時に供給するため compileOnly で
参照しており、版は kotlin-maven-plugin 自身が provided スコープで宣言する版が正となる。
provided は Gradle の POM 取り込み対象外で推移解決されないため、カタログのリテラルとして
持つ必要があるが、その値を手で選ぶと上流との一致が保証されない。

kotlin-maven-plugin の親 POM の <maven.version> を単一情報源とし、syncMavenVersion が
カタログへ書き戻し、checkMavenVersion が乖離を検出する(check へ紐付け)。
親 POM は子 POM の <parent> と照合し、上流のレイアウト変更を黙って取り込まないようにする。

maven 版は独立して選べる更新対象ではなくなるため、Dependabot の version updates から外す。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
単一情報源から導出される生成物(catalog の maven 版・README / docs / .idea の現行版表記)は
マニフェスト更新では変わらないため、Dependabot の版更新 PR は check の失敗で止まり、
同期タスクの手動実行を要していた。これを version-sync ワークフローへ委ねる。

Dependabot 起因の run は read-only な GITHUB_TOKEN で走り PR ブランチへ push できないため、
デフォルトブランチの定義が書き込み可能なトークンで起動される workflow_run で受ける。
write 権限下で PR head を実行する範囲を絞るため、対象は同一リポジトリのブランチに限る。

GITHUB_TOKEN による push は再帰防止で run を作らず、同期コミットの検証が動かないまま
PR のチェックが待ちで止まる。workflow_dispatch はトークン種別によらず run を作る例外のため、
build へ入口を追加して同期後に明示起動する。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant